Skip to content

revert(001): drop Serialized from aggregator-head-lag - #2278

Merged
Flotapponnier merged 1 commit into
devfrom
fix/001-drop-serialized
Sep 8, 2026
Merged

revert(001): drop Serialized from aggregator-head-lag#2278
Flotapponnier merged 1 commit into
devfrom
fix/001-drop-serialized

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Reverts #2268 before it reaches main. Nothing to retract publicly: the three Railway head-lag services build from main, so Serialized never collected a sample in production.

What was measured (2026-09-08)

One WS connection, the four bench pools, 240 s capture, plus a 150 s run asking a public Base node whether the block existed at the moment each trade arrived. Single vantage, NTP offset +0.078 s.

The ruler matches. Their at is the block timestamp exactly, so head_lag_seconds would measure the same quantity as Mobula's trade.Date and Codex's event.Timestamp.

chain n median(at − block timestamp)
base 105 +0.000 s
bnb 1 +0.000 s
solana 28 +0.473 s (getBlockTime returns whole seconds)

But they read a different thing.

check result
median(receipt − block timestamp), base −0.911 s
base events with negative lag 105/105
trades received before the block existed on a node 11/11
median lead over block publication 1.04 s

In all eleven cases the node head at receipt was exactly target block − 1. The block was not late in propagation, it did not exist yet. The spread (−0.21 s to −1.80 s) is one Base slot.

Why revert rather than ship

Serialized streams sequencer preconfirmations; Mobula, Codex and GeckoTerminal read sealed blocks. A preconfirmation carries no finality guarantee and can be reordered, so the ~1.5 s lead is a latency/finality trade-off, not a speed gap. One ranking would present it as superiority.

Mechanically it also breaks: RecordHeadLag drops lagSeconds < 0, so on Base they would read as no data while being the fastest, and any rare positive sample would stick on the gauge and become their published p50.

Open with them

  • preconfirmed was false on all eleven events that preceded block publication. A consumer cannot tell the two regimes apart from the payload.
  • Robinhood delivered 0 events in 240 s despite an acknowledged subscription, against 79 in 90 s on 2026-09-06.

Reopen if

The bench gains an emission-regime dimension (sealed vs preconfirmed), or a landing-rate companion series shows their preconfirmations reach sealed blocks 1:1.

Serialized stays on benches 004, 005, 008 and 090, where the comparison is like for like. Audit §18.1 records all of the above. 218 specs valid, harness builds.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LtBjM1FhTKxiZhwzb3Y61c

Reverts #2268 before it reaches main. Measured 2026-09-08: their `at` is
the block timestamp exactly, so the ruler matches, but on Base every
sampled trade arrives before its own block exists (11/11 received while
the node head was still target-1, median 1.04 s ahead of publication).

They stream sequencer preconfirmations; Mobula, Codex and GeckoTerminal
read sealed blocks. That is a latency/finality trade-off, not a speed
gap, and one ranking would present it as superiority. RecordHeadLag also
drops negatives, so on the legacy series they would read as no data on
Base while being the fastest.

Audit §18.1 records the measurements, the two open questions for them
(preconfirmed=false on all lead events, 0 Robinhood events in 240 s) and
the conditions to reopen. Serialized stays on benches 004, 005, 008, 090.

Claude-Session: https://claude.ai/code/session_01LtBjM1FhTKxiZhwzb3Y61c

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Flotapponnier
Flotapponnier merged commit 219472d into dev Sep 8, 2026
1 check failed
@Flotapponnier
Flotapponnier deleted the fix/001-drop-serialized branch September 8, 2026 14:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant